Analyzing the dynamic behavior and performance of a complex software system is difficult. Typically, analysis of a software system is achieved by gathering data at each system call and post-processing the data. The following is a brief description of conventional tracing frameworks used to analyze software.
The conventional tracing frameworks were typically composed of various independent software modules. The primary source of information accessed by the conventional tracing frameworks is the kernel. The conventional tracing frameworks typically include a trace facility, a trace module, a daemon, and an offline data analysis and processing component. The trace facility gathers information from various components of the kernel and forwards events to the trace module. The trace module subsequently logs the events in its buffer. Periodically, the trace daemon reads the events from the trace module buffer and commits the recorded events into a user-provided file.
Some conventional tracing frameworks, in addition to the aforementioned functionality, included functionality to allow a single point within the source (e.g., a single point with the kernel) to be access by multiple consumers (i.e., multiple processes accessing the conventional tracing framework and requesting data for one or more points within the source). Accordingly, tracing frameworks that include this functionality allow multiple consumers to access the same point in the source.
In the event that a given consumer terminates tracing at a given point within the source or altogether, the tracing framework frees the data structures associated with the consumer. Conventional tracing frameworks have implemented various mechanisms to ensure that when data structures associated with one consumer are freed by the tracing framework, that the action by the tracing framework does not impact the tracing being conduction by other consumers.
Three typical mechanisms that have been implemented by conventional tracing frameworks to ensure that when data structures associated with one consumer are freed there is no impact on the other consumers: (1) allowing one consumer to trace at a time; (2) allowing multiple consumers to trace any point within the source, but disabling tracing for a brief of time for all consumers when a single consumer wishes to cease tracing, and (3) constraining the context in which probes may fire to not include the elements of the system required for synchronization.